//
//  XFCacheViewManager.h
//  Test
//
//  Created by ukongm on 17/5/18.
//  Copyright © 2017年 ukongm. All rights reserved.
//

#import <UIKit/UIKit.h>

#pragma mark - 这个协议只是帮助需要使用这个委托对象的代码规范
@protocol XFCacheViewManagerDelegate <NSObject>

@optional
/**
 当调用getCacheViewsForCount方法的时候，就会执行这个方法，每个被缓存的view都会走这个方法
 {可以在这个方法里面给view设置frame，需要展示的数据}

 @param view         被缓存的view
 @param index        对应的索引
 @param dataSource   对应的数据
 */
- (void)view:(UIView*)view atIndex:(NSInteger)index dataSource:(id)dataSource;

/**
 当复用池的视图不够，会调用这个方法去获取复用控件

 @param index        对应的位置索引
 @param dataSource   对应的数据

 @return 复用视图
 */
- (UIView*)createViewForIndex:(NSInteger)index dataSource:(id)dataSource;

@end

/**
 该控制器的功能是
 
 很多一样的视图，根据设置的数据源去展示。
 */
@interface XFCacheViewManager : NSObject

/**
 获取复用池中的控件

 @param count 获取的个数

 @return 装有复用控件的数组
 
 ps : 这个方法的机制是，当count大于复用池中的控件个数，就会执行createViewForIndex代理方法
        当然，任何时候都会调用view：atIndex:方法
 */
- (NSArray<UIView*>*)getCacheViewsForCount:(NSInteger)count;

#pragma mark - 回调block（以下block都要被赋值，不然会蹦溃）
/**
 当调用getCacheViewsForCount方法的时候，就会执行这个方法，每个被缓存的view都会走这个方法
 {可以在这个方法里面给view设置frame，需要展示的数据}
 
 param view  被缓存的view
 param index 对应的索引
 */
@property(nonatomic,copy)void(^settingComplate)(UIView* view , NSInteger index);
/**
 当复用池的视图不够，会调用这个方法去获取复用控件
 
 param index 对应的位置索引
 
 return 复用视图
 */
@property(nonatomic,copy)UIView* (^craeteComplate)(NSInteger index);


@end
